স্প্রিং জেডিবিসি (Spring JDBC) এ Batch Processing হল একটি পদ্ধতি যার মাধ্যমে একাধিক SQL অপারেশন একসাথে (batch) এক্সিকিউট করা হয়। এতে করে ডেটাবেসের সাথে যোগাযোগের সংখ্যা কমানো যায়, যা কর্মক্ষমতা বাড়াতে সাহায্য করে, বিশেষত যখন একাধিক ইনসার্ট, আপডেট বা ডিলিট অপারেশন করা হয়।
স্প্রিং জেডিবিসি তে Batch Processing ব্যবহার করার জন্য প্রধানত JdbcTemplate এর batchUpdate() মেথড ব্যবহার করা হয়। এই মেথডটি একাধিক SQL স্টেটমেন্ট একবারে এক্সিকিউট করার জন্য ব্যবহৃত হয়।
স্প্রিং জেডিবিসি তে Batch Processing কিভাবে কাজ করে:
- Multiple SQL Operations in One Batch: একাধিক SQL অপারেশন একই সাথে এক্সিকিউট করা হয়, যা ডেটাবেসে একাধিক রেকর্ড একসাথে ইনসার্ট বা আপডেট করার জন্য কার্যকর।
- Performance Improvement: একাধিক SQL স্টেটমেন্ট একসাথে পাঠানো হয়, যার ফলে ডেটাবেসের সাথে যোগাযোগের সংখ্যা কমে যায় এবং কর্মক্ষমতা বাড়ে।
- Efficient Memory Usage: ব্যাচ অপারেশন ডেটাবেস রিসোর্সের ব্যবহারে সাশ্রয়ী।
Spring JDBC Batch Processing উদাহরণ
১. ইনসার্ট ব্যাচ অপারেশন
ধরা যাক, আমরা একাধিক Employee রেকর্ড ইনসার্ট করতে চাই। এজন্য batchUpdate() মেথড ব্যবহার করা হবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to add multiple employees in batch
public void addEmployeesBatch(final List<Employee> employees) {
String sql = "INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)";
// Using BatchPreparedStatementSetter to set batch parameters
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Employee employee = employees.get(i);
ps.setInt(1, employee.getId());
ps.setString(2, employee.getName());
ps.setDouble(3, employee.getSalary());
}
@Override
public int getBatchSize() {
return employees.size();
}
});
}
}
ব্যাখ্যা:
- এখানে
batchUpdate()মেথড ব্যবহার করা হয়েছে, যাBatchPreparedStatementSetterএর মাধ্যমে ব্যাচ স্টেটমেন্ট গুলি সেট করে। প্রতিটিPreparedStatementএর জন্য প্রয়োজনীয় মানগুলো (প্রতিটিEmployeeএর তথ্য) সেট করা হয়। getBatchSize()মেথডটি ব্যাচের আকার (যত গুলো রেকর্ড ইনসার্ট করা হবে) নির্ধারণ করে।
২. আপডেট ব্যাচ অপারেশন
আপনি যদি একাধিক Employee এর তথ্য আপডেট করতে চান, তাহলে একইভাবে batchUpdate() ব্যবহার করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to update employee salaries in batch
public void updateSalariesBatch(final List<Employee> employees) {
String sql = "UPDATE Employee SET salary = ? WHERE id = ?";
// Using BatchPreparedStatementSetter to set batch parameters
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Employee employee = employees.get(i);
ps.setDouble(1, employee.getSalary());
ps.setInt(2, employee.getId());
}
@Override
public int getBatchSize() {
return employees.size();
}
});
}
}
ব্যাখ্যা:
- এখানে ব্যাচে একাধিক
Employeeএরsalaryআপডেট করা হচ্ছে।BatchPreparedStatementSetterএরsetValues()মেথডে প্রতিটি রেকর্ডের তথ্য সেট করা হচ্ছে এবংgetBatchSize()মেথডে মোট রেকর্ড সংখ্যা নির্ধারণ করা হচ্ছে।
৩. ডিলিট ব্যাচ অপারেশন
এখন, একাধিক Employee রেকর্ড ডিলিট করার জন্য ব্যাচ প্রক্রিয়া দেখানো হচ্ছে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to delete employees in batch
public void deleteEmployeesBatch(final List<Integer> employeeIds) {
String sql = "DELETE FROM Employee WHERE id = ?";
// Using BatchPreparedStatementSetter to set batch parameters
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, employeeIds.get(i));
}
@Override
public int getBatchSize() {
return employeeIds.size();
}
});
}
}
ব্যাখ্যা:
- এখানে
DELETEস্টেটমেন্ট ব্যবহার করা হয়েছে।employeeIdsএর একটি লিস্ট দেয়া হয়েছে, যেখানে প্রতিটিEmployeeআইডি ডিলিট করার জন্য ব্যাচের মাধ্যমে পাঠানো হচ্ছে।
Batch Processing এর সুবিধা
- ডেটাবেস কনেকশন অপটিমাইজেশন: একাধিক SQL অপারেশন একসাথে পাঠানোর ফলে ডেটাবেস কনেকশন এবং নেটওয়ার্ক কলের সংখ্যা কমে যায়।
- কর্মক্ষমতা বৃদ্ধি: একাধিক ইনসার্ট বা আপডেট একসাথে এক্সিকিউট করা হলে ডেটাবেসে আই/ও অপারেশন কম হয়, যা কর্মক্ষমতা বৃদ্ধি করে।
- নির্ভরযোগ্যতা: ব্যাচ অপারেশন ব্যবহারে ডেটাবেসের জন্য পারফরম্যান্স সমস্যা কমে এবং ট্রানজেকশন নিশ্চিত করা হয়।
উপসংহার
স্প্রিং জেডিবিসি তে ব্যাচ প্রসেসিং ব্যবহার করলে একাধিক SQL অপারেশন একসাথে কার্যকরভাবে সম্পাদিত হয়, যার ফলে ডেটাবেসের সাথে যোগাযোগের সংখ্যা কমে এবং কর্মক্ষমতা বৃদ্ধি পায়। batchUpdate() মেথডটি ব্যাচ অপারেশনগুলিকে পরিচালনা করার জন্য সহজ এবং কার্যকরী উপায় প্রদান করে।
Batch Processing হল একটি প্রযুক্তি যা একাধিক SQL কুয়েরি বা অপারেশন একসাথে (ব্যাচে) এক্সিকিউট করার প্রক্রিয়া। এটি মূলত পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত হয়, বিশেষত যখন একাধিক ডেটাবেস অপারেশন একই সময়ে সম্পন্ন করতে হয়। Spring JDBC এ Batch Processing ব্যবহার করে একাধিক SQL অপারেশনকে একযোগে কার্যকর করা সম্ভব, যার ফলে ডেটাবেসে একাধিক অর্ডার ইনসার্ট, আপডেট, ডিলিট ইত্যাদি অপারেশন দ্রুত সম্পন্ন করা যায়।
Batch Processing কি?
Batch Processing হল এমন একটি পদ্ধতি যেখানে একাধিক SQL কুয়েরি বা ডেটাবেস অপারেশন একটি গ্রুপ হিসেবে (ব্যাচ) একসাথে রানের জন্য প্রস্তুত করা হয় এবং একবারে একাধিক অপারেশন সম্পন্ন করা হয়। সাধারণত, যখন আমাদের বড় পরিমাণ ডেটা ডেটাবেসে ইনসার্ট, আপডেট বা ডিলিট করতে হয়, তখন Batch Processing ব্যবহার করা হয় যাতে প্রতিটি অপারেশনের জন্য ডেটাবেসে আলাদা আলাদা কুয়েরি চালানোর প্রয়োজন না হয়, এবং একসাথে কাজগুলো করা যায়।
Spring JDBC এ JdbcTemplate এর মাধ্যমে Batch Processing সহজে করা যায়।
Batch Processing এর প্রয়োজনীয়তা:
- পারফরম্যান্স উন্নতি:
- যখন একাধিক SQL কুয়েরি একসাথে চালানো হয়, তখন প্রতিটি কুয়েরির জন্য ডেটাবেস সংযোগ স্থাপন এবং কুয়েরি প্রক্রিয়া করার সময় কাটানো হয়। Batch Processing এ একবারেই সব কুয়েরি একসাথে সিস্টেমে পাঠানো হয়, ফলে প্রতি কুয়েরির জন্য আলাদা আলাদা নেটওয়ার্ক রাউন্ড ট্রিপ করা হয় না এবং ডেটাবেসের অপারেশন দ্রুত সম্পন্ন হয়।
- কম রিসোর্স ব্যবহার:
- একাধিক কুয়েরি একসাথে এক্সিকিউট করা হলে, সিস্টেম রিসোর্সের ব্যবহার কমে যায়। এতে করে CPU, মেমরি, এবং নেটওয়ার্কের চাপও কমে থাকে।
- কম সময়ের মধ্যে বড় পরিমাণ ডেটা প্রসেসিং:
- যখন আমাদের অনেক ডেটা ডেটাবেসে ইনসার্ট বা আপডেট করতে হয়, তখন Batch Processing একটি ভালো অপশন হতে পারে, কারণ এটি একাধিক ডেটা একসাথে প্রসেস করতে সক্ষম।
- এফিসিয়েন্সি ও স্কেলেবিলিটি:
- যখন ডেটাবেসে বড় পরিমাণ ডেটা ইনসার্ট বা আপডেট করতে হয়, Batch Processing সেই অপারেশনগুলোকে স্কেলেবেল এবং এফিসিয়েন্ট বানায়। এটি বিশেষভাবে সহায়ক যখন অনেক ডেটার সাথে কাজ করা হয়, যেমন লগ ডেটা বা বড় ডেটা সেট।
- কম ট্রান্সেকশন ওভারহেড:
- প্রতিটি SQL অপারেশনের জন্য ট্রান্সেকশন ওপেন এবং ক্লোজ করার সময় অনেকটা ওভারহেড থাকে। Batch Processing অনেক SQL কুয়েরি একসাথে একসঙ্গে প্রক্রিয়া করার ফলে, ট্রান্সেকশন ওপেন এবং ক্লোজ করার ওভারহেড কমে যায়।
Spring JDBC তে Batch Processing কিভাবে কাজ করে?
Spring JDBC তে JdbcTemplate এর মাধ্যমে Batch Processing ব্যবহার করা হয়। এখানে batchUpdate মেথড ব্যবহার করা হয়, যা একাধিক SQL কুয়েরি বা স্টেটমেন্ট একসাথে এক্সিকিউট করার সুবিধা দেয়।
Spring JDBC Batch Processing এর উদাহরণ:
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
public class BatchProcessingExample {
private JdbcTemplate jdbcTemplate;
public BatchProcessingExample(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void addUsersBatch() {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
// Batch data to insert
Object[][] users = {
{"John Doe", "john.doe@example.com"},
{"Jane Smith", "jane.smith@example.com"},
{"Robert Johnson", "robert.johnson@example.com"}
};
// Execute batch update
jdbcTemplate.batchUpdate(sql, users);
}
}
এখানে:
batchUpdateমেথড ব্যবহার করে একাধিকINSERTকুয়েরি একসাথে ডেটাবেসে এক্সিকিউট করা হচ্ছে।Object[][]ব্যবহার করে একাধিক ইউজারের ডেটা অ্যারে আকারে জমা করা হয়েছে।
Batch Processing এর সুবিধা:
- পারফরম্যান্স বৃদ্ধি: একাধিক SQL কুয়েরি একসাথে এক্সিকিউট করা হয়, ফলে ডেটাবেস অপারেশন দ্রুত হয় এবং সময় বাঁচে।
- রিসোর্স ব্যবহারের দক্ষতা: একাধিক অপারেশন একসাথে পরিচালনা করা হলে রিসোর্স যেমন নেটওয়ার্ক ব্যান্ডউইথ, CPU টাইম ইত্যাদির দক্ষ ব্যবহারে সাহায্য হয়।
- কম ট্রান্সেকশন কস্ট: একটি ব্যাচের মধ্যে একাধিক কুয়েরি একসাথে প্রক্রিয়া হলে, প্রতিটি কুয়েরির জন্য আলাদা ট্রান্সেকশন খোলার প্রয়োজন হয় না, ফলে ট্রান্সেকশন কস্ট কমে।
Batch Processing এর প্রধান সমস্যা:
- অপারেশন ব্যর্থ হলে পুরোটাই ব্যর্থ হতে পারে: একাধিক SQL কুয়েরি একসাথে এক্সিকিউট করার কারণে, যদি একটি কুয়েরি ব্যর্থ হয় তবে পুরো ব্যাচটি ব্যর্থ হতে পারে। এই কারণে ব্যাচ প্রক্রিয়া ব্যবহারের সময় যথাযথ ত্রুটি হ্যান্ডলিং করা উচিত।
সংক্ষেপে Batch Processing এর গুরুত্ব:
Batch Processing এর মাধ্যমে পারফরম্যান্স, স্কেলেবিলিটি, এবং রিসোর্স ব্যবহারের দক্ষতা বৃদ্ধি পায়। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন বড় পরিমাণ ডেটার সাথে কাজ করতে হয়, যেমন ডেটাবেসে একাধিক ইনসার্ট, আপডেট বা ডিলিট অপারেশন করা। Spring JDBC তে JdbcTemplate এর batchUpdate মেথড ব্যবহার করে সহজেই Batch Processing করা যায়।
Spring JDBC ডেটাবেসে একাধিক রেকর্ড Batch Insert, Update, এবং Delete অপারেশনের জন্য কার্যকর টুল সরবরাহ করে। Batch Processing ডেটাবেস অপারেশনগুলিকে দ্রুত এবং কার্যকর করতে সাহায্য করে। Spring JDBC-তে JdbcTemplate এবং BatchPreparedStatementSetter ব্যবহার করে সহজেই এসব কাজ সম্পন্ন করা যায়।
Batch Insert
Batch Insert করার প্রয়োজনীয়তা
যখন একাধিক রেকর্ড ইনসার্ট করতে হয়, তখন একের পর এক ইনসার্ট করার বদলে Batch Insert ব্যবহার করলে পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত হয়।
উদাহরণ: Batch Insert
public void batchInsertUsers(List<User> users) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
}
@Override
public int getBatchSize() {
return users.size();
}
});
}
কোড ব্যাখ্যা:
- SQL স্টেটমেন্ট: ইনসার্ট কুয়েরি।
- BatchPreparedStatementSetter:
setValues()মেথডে প্রতিটি রেকর্ডের জন্য প্যারামিটার সেট করা হয়।getBatchSize()মেথডে ব্যাচের আকার নির্ধারণ করা হয়।
- jdbcTemplate.batchUpdate(): ব্যাচ ইনসার্ট কার্যকর করে।
Batch Update
Batch Update করার প্রয়োজনীয়তা
একাধিক রেকর্ড আপডেট করার সময় Batch Update ব্যবহারে সময় এবং রিসোর্সের সাশ্রয় হয়।
উদাহরণ: Batch Update
public void batchUpdateEmails(List<User> users) {
String sql = "UPDATE users SET email = ? WHERE id = ?";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setString(1, user.getEmail());
ps.setInt(2, user.getId());
}
@Override
public int getBatchSize() {
return users.size();
}
});
}
কোড ব্যাখ্যা:
sql: আপডেট কুয়েরি।BatchPreparedStatementSetterপ্রতিটি রেকর্ডের জন্য প্যারামিটার সেট করে।jdbcTemplate.batchUpdate()ব্যাচ আপডেট সম্পন্ন করে।
Batch Delete
Batch Delete করার প্রয়োজনীয়তা
যখন একাধিক রেকর্ড মুছে ফেলতে হয়, তখন Batch Delete ব্যবহার করে একাধিক ডেটাবেস কল এড়ানো যায়।
উদাহরণ: Batch Delete
public void batchDeleteUsers(List<Integer> userIds) {
String sql = "DELETE FROM users WHERE id = ?";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, userIds.get(i));
}
@Override
public int getBatchSize() {
return userIds.size();
}
});
}
কোড ব্যাখ্যা:
sql: ডিলিট কুয়েরি।BatchPreparedStatementSetterপ্রতিটি রেকর্ডের জন্যidপ্যারামিটার সেট করে।jdbcTemplate.batchUpdate()ব্যাচ ডিলিট সম্পন্ন করে।
ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে ব্যাচ অপারেশন
Java 8 এর ল্যাম্বডা ফিচার ব্যবহার করে ব্যাচ প্রসেস আরও কমপ্যাক্ট করা যায়।
Batch Insert with Lambda
public void batchInsertWithLambda(List<User> users) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, users, users.size(),
(ps, user) -> {
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
}
);
}
Transaction Management সহ ব্যাচ প্রসেসিং
Batch অপারেশনের সময় ডেটা সঠিক রাখতে ট্রানজেকশন ব্যবহৃত হয়। Spring-এর @Transactional অ্যানোটেশন দিয়ে ট্রানজেকশন ম্যানেজ করা যায়।
Batch Processing with Transaction
@Service
@Transactional
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void batchInsertWithTransaction(List<User> users) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
}
@Override
public int getBatchSize() {
return users.size();
}
});
}
}
Performance Tips
- Batch Size: ব্যাচ সাইজ (batch size) খুব বড় বা খুব ছোট হওয়া উচিত নয়। ৫০-১০০ রেকর্ড একটি ভালো সাইজ।
- Connection Pooling: ব্যাচ প্রসেসিংয়ে DataSource Connection Pooling ব্যবহার করলে পারফরম্যান্স উন্নত হয়।
- Transaction Management: বড় ব্যাচ অপারেশনের সময় ট্রানজেকশন ব্যবহার করুন।
- Indexed Columns: ব্যাচ আপডেট এবং ডিলিটের ক্ষেত্রে প্রয়োজনীয় কলামে ইনডেক্স নিশ্চিত করুন।
উপসংহার
Spring JDBC-তে Batch Insert, Update, এবং Delete ব্যবহার করলে ডেটাবেস অপারেশনের পারফরম্যান্স উল্লেখযোগ্যভাবে বৃদ্ধি পায়। এটি বড় আকারের ডেটা ম্যানিপুলেশনের জন্য অত্যন্ত কার্যকর। BatchPreparedStatementSetter এবং ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে কোড আরও সংক্ষিপ্ত এবং সহজ করা যায়।
Spring JDBC এ Batch Processing ব্যবহার করার মাধ্যমে একাধিক SQL অপারেশন (যেমন, ইনসার্ট, আপডেট, ডিলিট) একসাথে কার্যকর করা যায়। এতে করে ডেটাবেসের সাথে যোগাযোগের সংখ্যা কমে যায় এবং পারফর্মেন্স বৃদ্ধি পায়, বিশেষ করে যখন অনেক রেকর্ড একসাথে প্রক্রিয়া করতে হয়। নিচে উদাহরণ সহ ব্যাচ প্রোসেসিং ব্যবহার করার পদ্ধতি দেখানো হল।
Batch Processing উদাহরণ:
ধরা যাক আমাদের একটি Employee টেবিল রয়েছে, যেখানে কর্মীদের তথ্য ইনসার্ট করতে হবে। আমাদের উদ্দেশ্য হল একাধিক কর্মীকে একবারে ইনসার্ট করা।
Step 1: application.properties ফাইলে ডেটাবেস কনফিগারেশন
প্রথমে, application.properties ফাইলে ডেটাবেস কনফিগারেশন করতে হবে:
# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=root_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Connection Pool Configuration (HikariCP)
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-timeout=30000
# Hibernate Configuration (Optional)
spring.jpa.hibernate.ddl-auto=update
Step 2: Employee ক্লাস তৈরি করুন:
এখানে একটি Employee ক্লাস তৈরি করা হয়েছে, যা ডেটাবেস টেবিলের সাথে সম্পর্কিত:
public class Employee {
private int id;
private String name;
private double salary;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Step 3: Batch Processing কোড লিখুন:
এখন Spring JDBC এর JdbcTemplate ব্যবহার করে ব্যাচ প্রক্রিয়া করব। এই উদাহরণে আমরা তিনটি কর্মীকে একসাথে ইনসার্ট করব।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public class EmployeeRepository {
private JdbcTemplate jdbcTemplate;
// Constructor injection for JdbcTemplate
public EmployeeRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void insertEmployeesBatch() {
String sql = "INSERT INTO employee (id, name, salary) VALUES (?, ?, ?)";
// Batch data to be inserted
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[] {1, "John Doe", 50000});
batchArgs.add(new Object[] {2, "Jane Smith", 55000});
batchArgs.add(new Object[] {3, "James Bond", 60000});
// Perform batch update
jdbcTemplate.batchUpdate(sql, batchArgs);
}
}
Step 4: Service Layer এ insertEmployeesBatch() মেথড কল করুন:
এখন, EmployeeService ক্লাসে এই ব্যাচ ইনসার্ট মেথডটি কল করা হবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
public void batchInsertEmployees() {
employeeRepository.insertEmployeesBatch();
}
}
Step 5: Controller তৈরি করুন (Optional):
আপনি যদি এই ফাংশনালিটি ওয়েব ইন্টারফেসে ব্যবহার করতে চান, তবে Spring MVC Controller তৈরি করতে পারেন:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
private final EmployeeService employeeService;
@Autowired
public EmployeeController(EmployeeService employeeService) {
this.employeeService = employeeService;
}
@GetMapping("/insert-batch-employees")
public String insertBatchEmployees() {
employeeService.batchInsertEmployees();
return "Batch Insert Completed!";
}
}
Step 6: Spring Boot Application রান করুন:
এখন আপনি Spring Boot অ্যাপ্লিকেশনটি রান করতে পারেন এবং /insert-batch-employees URL এ গিয়ে ব্যাচ ইনসার্ট পরীক্ষা করতে পারেন।
Batch Processing এর সুবিধা:
- পারফর্মেন্স বৃদ্ধি: একাধিক রেকর্ড একসাথে ইনসার্ট করা হলে ডেটাবেসের সাথে যোগাযোগের সংখ্যা কমে যায়, যা পারফর্মেন্সে উল্লেখযোগ্য উন্নতি ঘটায়।
- কম নেটওয়ার্ক রাউন্ড-ট্রিপ: একাধিক SQL কমান্ড একসাথে প্রেরণ করা হয়, ফলে প্রতিটি কমান্ডের জন্য আলাদাভাবে নেটওয়ার্ক রাউন্ড-ট্রিপ হয় না।
- লোড কমানো: ডেটাবেস সার্ভারের ওপর কম লোড পড়ে, কারণ একাধিক কমান্ড একসাথে প্রেরণ করা হয়।
- ডেটাবেসের সাথে সিস্টেমের সমন্বয়: বিশেষ করে যখন অনেক রেকর্ড ইনসার্ট, আপডেট বা ডিলিট করতে হয়, তখন এটি সময় বাঁচাতে সাহায্য করে।
Batch Processing এর সীমাবদ্ধতা:
- ব্যাচ সাইজ: খুব বড় ব্যাচ সাইজ ব্যবহার করলে মেমরি প্রয়োগ বেশি হতে পারে, তাই সঠিক ব্যাচ সাইজ নির্ধারণ করা উচিত।
- ব্যাচ ফেইলিউর: যদি একটি ব্যাচের মধ্যে একটি SQL স্টেটমেন্ট ব্যর্থ হয়, পুরো ব্যাচটি ব্যর্থ হতে পারে।
এভাবে Spring JDBC এর Batch Processing ব্যবহার করে আপনি ডেটাবেসে কার্যকরী এবং দক্ষভাবে ডেটা প্রক্রিয়া করতে পারেন।
Read more